/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Persistencia;

import Mensajes.Orden;
import Mensajes.Resultado;

import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import javax.naming.Context;
import javax.sql.DataSource;
import javax.naming.InitialContext;

public class conexionBD {

	private static String UserName = "root";
	private static String Pass = "root";
	private static String BD = "jdbc:mysql://localhost:8084/Laboratorio";

	public static int insertOrden(Orden laOrden) {
		int salida = 0;

		try {

			int id = laOrden.getIdOrden();
			int osId = laOrden.getOsId();
			int indicId = laOrden.getIndicId();
			String estudioId = laOrden.getEstudioId();
			String oidDoc = laOrden.getOidDocumento();
			String documento = laOrden.getNroDocumento();
			String fechaHora = laOrden.getFechaHora();
			String msjHl7 = laOrden.getMsjHl7();

			Context initContext = new InitialContext();
			Context envContext = (Context) initContext.lookup("java:/comp/env");
			DataSource datasource = (DataSource) envContext.lookup("jdbc/Laboratorio");
			java.sql.Connection conexion = datasource.getConnection();
			/*
			 * InitialContext ctx = new InitialContext(); //The JDBC Data source
			 * that we just created DataSource ds = (DataSource)
			 * ctx.lookup("laboratorio"); java.sql.Connection conexion =
			 * ds.getConnection();
			 */
			java.sql.Statement s = (java.sql.Statement) conexion.createStatement();



			String query = "INSERT INTO Laboratorio.Orden "
					+ "(idOrden, "
					+ "OsId, "
					+ "IndicId, "
					+ "EstudioId, " 
					+ "OIDDocumento, "
					+ "NroDocumento, "
					+ "FechaHora, "
					+ "msjHl7) "
					+ "VALUES(" + id + ", " + osId + ", " + indicId + ", '" + estudioId
					+ "', " + oidDoc + ", '"+ documento + "', " + fechaHora + ", '" + msjHl7 + "');";

			//ResultSet rs = s.executeQuery(query);
			salida = s.executeUpdate(query);
			log("NuevaOrden", msjHl7, "Recibido Ok", id);

			conexion.close();
		} catch (Exception e) {
			e.printStackTrace();
			log("NuevaOrden", laOrden.getMsjHl7(), "Error al insertar nueva orde de laboratorio", laOrden.getIdOrden());
		}
		return salida;
	}

	public static int insertResultado(Resultado elResultado) {
		int salida = 0;

		try {

			Context initContext = new InitialContext();
			Context envContext = (Context) initContext.lookup("java:/comp/env");
			DataSource datasource = (DataSource) envContext.lookup("jdbc/Laboratorio");
			java.sql.Connection conexion = datasource.getConnection();
			/*
			 * InitialContext ctx = new InitialContext(); //The JDBC Data source
			 * that we just created DataSource ds = (DataSource)
			 * ctx.lookup("laboratorio"); java.sql.Connection conexion =
			 * ds.getConnection();
			 */
			java.sql.Statement s = (java.sql.Statement) conexion.createStatement();

			String query = "INSERT INTO laboratorio.resultado "+
					"(idResultado, "+
					"IdEstudio, "+
					"IdSecuencial, "+
					"TipoDato, "+
					"NombreEstudio, "+
					"OidEstudio, "+
					"Resultado, "+
					"Unidad, "+
					"Rango, " +
					"TipoResultado, "+
					"Estado, "+
					"FecHoraResultado) "+
					"VALUES "+
					"("+elResultado.getIdResultado()+", '"+
					elResultado.getIdEstudio()+"', "+					
					elResultado.getIdSecuencial()+", '"+
					elResultado.getTipoDato()+"', '"+
					elResultado.getNombreEstudio()+"', '" +
					elResultado.getOidEstudio()+"', '"+
					elResultado.getResultado()+"', '"+
					elResultado.getUnidad()+"', '"+
					elResultado.getRango()+"', '"+
					elResultado.getTipoResultado()+"', '"+
					elResultado.getEstado()+"', '"+
					elResultado.getFecHoraResultado()+"')";

			//ResultSet rs = s.executeQuery(query);
			salida = s.executeUpdate(query);

			conexion.close();
		} catch (Exception e) {
			e.printStackTrace();
			log("RecepcionResultado", elResultado.getMsjHl7(), "Error al insertar resultado de laboratorio", elResultado.getIdResultado());
		}
		return salida;
	}

	public static int log(String tipo, String hl7, String resultado, int msjId) {
		int salida = 0;

		try {

			Context initContext = new InitialContext();
			Context envContext = (Context) initContext.lookup("java:/comp/env");
			DataSource datasource = (DataSource) envContext.lookup("jdbc/Laboratorio");
			java.sql.Connection conexion = datasource.getConnection();

			java.sql.Statement s = (java.sql.Statement) conexion.createStatement();

			String query = "INSERT INTO laboratorio.LogWSLab "
					+ "(LogMsjTipo, "
					+ "LogResultado, "
					+ "LogMsjHl7, "
					+ "LogFechaHora,"
					+ "LogMsjId) "
					+ "VALUES ('" + tipo + "', '" + resultado + "', '" + hl7 + "', now(), " + msjId + ");";

			salida = s.executeUpdate(query);

			conexion.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return salida;
	}

	public static  List<Orden>  obtenerOrden(String descripcion)  {
		List <Orden> salida=new ArrayList <Orden>();

		try
		{
			Context initContext = new InitialContext();
			Context envContext = (Context) initContext.lookup("java:/comp/env");
			DataSource datasource = (DataSource) envContext.lookup("jdbc/Laboratorio");
			java.sql.Connection conexion = datasource.getConnection();

			java.sql.Statement s = (java.sql.Statement) conexion.createStatement();

			String query="";
			if(descripcion!=null){
				query="select * from orden where "+descripcion;
			}else {
				query="select * from orden";
			}

			ResultSet rs = s.executeQuery (query);

			while (rs.next())
			{
				Orden ord = new Orden();
				ord.setIdOrden(rs.getInt("idOrden"));
				ord.setOsId(rs.getInt("OsId"));
				ord.setIndicId(rs.getInt("IndicId"));
				ord.setEstudioId(rs.getString("EstudioId"));
				ord.setOidDocumento(rs.getString("OIDDocumento"));
				ord.setNroDocumento(rs.getString("NroDocumento"));
				ord.setFechaHora(rs.getString("FechaHora"));
				ord.setMsjHl7(rs.getString("msjHl7"));
				salida.add(ord);
			}

			conexion.close();
		}
		catch (Exception e)
		{
			e.printStackTrace();

		}
		return salida;
	}

	public static  List<Resultado>  obtenerResultado(String descripcion)  {
		List <Resultado> resultados=new ArrayList <Resultado>();

		try
		{
			Context initContext = new InitialContext();
			Context envContext = (Context) initContext.lookup("java:/comp/env");
			DataSource datasource = (DataSource) envContext.lookup("jdbc/Laboratorio");
			java.sql.Connection conexion = datasource.getConnection();

			java.sql.Statement s = (java.sql.Statement) conexion.createStatement();

			String query="";
			if(descripcion!=null){
				query="select * from resultado where "+descripcion;
			}else {
				query="select * from resultado";
			}

			ResultSet rs = s.executeQuery (query);

			while (rs.next())
			{
				Resultado res = new Resultado();
				res.setIdResultado(rs.getInt("idResultado"));
				res.setIdEstudio(rs.getString("IdEstudio"));
				res.setNombreEstudio(rs.getString("NombreEstudio"));
				res.setIdSecuencial(rs.getInt("IdSecuencial"));
				res.setTipoDato(rs.getString("TipoDato"));
				res.setResultado(rs.getString("Resultado"));
				res.setUnidad(rs.getString("Unidad"));
				res.setRango(rs.getString("Rango"));
				res.setTipoResultado(rs.getString("TipoResultado"));
				res.setEstado(rs.getString("Estado"));
				res.setFecHoraResultado(rs.getString("FecHoraResultado"));	
				res.setOidEstudio(rs.getString("OidEstudio"));	
				resultados.add(res);
			}

			conexion.close();
		}
		catch (Exception e)
		{
			e.printStackTrace();

		}
		return resultados;
	}

	public static  List<String>  obtenerParametros(String descripcion)  {
		List <String> salida=new ArrayList <String>();

		try
		{
			Context initContext = new InitialContext();
			Context envContext = (Context) initContext.lookup("java:/comp/env");
			DataSource datasource = (DataSource) envContext.lookup("jdbc/Laboratorio");
			java.sql.Connection conexion = datasource.getConnection();

			java.sql.Statement s = (java.sql.Statement) conexion.createStatement();

			String query="";
			if(descripcion!=null){
				query="select * from Parametros where "+descripcion;
			}else {
				query="select * from Parametros";
			}

			ResultSet rs = s.executeQuery (query);

			while (rs.next())
			{				
				salida.add(rs.getString("valor"));
			}

			conexion.close();
		}
		catch (Exception e)
		{
			e.printStackTrace();

		}
		return salida;
	}

}